﻿using System.Diagnostics;
using System.Text.RegularExpressions;

namespace BlogAPIUnitTest
{
    using RssToolkit.Rss;
    using System.Collections.Generic;
    using System.IO;
    using System;
    using BlogsAPI;
    using System.Threading;
    using BlogsAPI.BlogsYandex;
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    /// <summary>
    /// Проверим взаимодействие с Яндексом
    /// </summary>
    [TestClass]
    public class BlogsYandexTest
    {
        //[Test(Description="Загружаем посты для выбранной записи")]
        [TestMethod]
        public void LoadComments()
        {
            PostWatch pw = new PostWatch();
            YandexParsed yp = pw.ExtractCommentsNew("http://dolboeb.livejournal.com/1602948.html");

            Assert.IsTrue(yp.Total > 300);
            //http://www.liveinternet.ru/users/flashr/post101238109/
            Assert.AreEqual(10, yp.OParsed.Count);
        }

        //[Test(Description = "Загружаем ссылки на выбранную запись")]
        [TestMethod]
        public void LoadLinks()
        {
            PostWatch pw = new PostWatch();
            YandexParsed yp = pw.ExtractLinksNew("http://galkovsky.livejournal.com/243348.html");
            Assert.IsTrue(yp.Total > 0);
            Assert.AreEqual(10, yp.OParsed.Count);//число результатов на странице
        }


        //[Test(Description = "Загружаем ссылку на аватарку по блогу из Яндекса")]
        [TestMethod]
        public void LoadAvatar()
        {
            Assert.AreNotEqual(null,
                               BlogsAPI.Common.ExtractAvatar("http://vk.com/id179638351"));
            //Assert.AreNotEqual(null,
            //                   BlogsAPI.Common.ExtractAvatar("http://plus.google.com/109650765055495118073"));
            //BlogsAPI.Common.ExtractAvatar("http://dolboeb.livejournal.com/1602948.html"));
            //BlogsAPI.Common.ExtractAvatar("http://oni_zaebali.livejournal.com"));
            //BlogsAPI.Common.ExtractAvatar("http://twitter.com/kate_clapp"));
            //BlogsAPI.Common.ExtractAvatar("http://youtube.com/MrKvascoff"));
            //BlogsAPI.Common.ExtractAvatar("http://plus.google.com/102871830398264157687"));
            //BlogsAPI.Common.ExtractAvatar("http://www.liveinternet.ru/users/hlebniks"));
            //BlogsAPI.Common.ExtractAvatar("liveinternet.ru/community/tv_project_dom-2"));
            //BlogsAPI.Common.ExtractAvatar("mblogi.qip.ru/people/465896182"));
            //BlogsAPI.Common.ExtractAvatar("youtube.com/hmke2yidn8uwphgrp6wn8a"));
        }

        //[Test(Description="Извлечение ссылок из Яндекса. Что-то найдено")]
        [TestMethod]
        public void LinksCommsSuccess()
        {
            BlogPost bp = BlogPost.SimpleLink("http://magictop30.livejournal.com/580.html");

            Assert.IsTrue(bp.Comments > -1);
            Common.Dp("Найдено " + bp.Comments.ToString() + " комментов");
            Assert.IsTrue(bp.Links > -1);
            Common.Dp("Найдено " + bp.Links.ToString() + " ссылок");
        }

        //[Test(Description = "Извлечение ссылок из Яндекса. Ничего не найдено.")]
        [TestMethod]
        public void LinksCommsFail()
        {
            BlogPost bp = BlogPost.SimpleLink("http://nepekoc.livejournal.com/938.html");
            Common.Dp("Ищем ссылки и комменты для "+bp.Link.OriginalString);
            Assert.AreEqual(bp.Comments, 0);
            Common.Dp("Найдено " + bp.Comments.ToString() + " комментов");
            Assert.AreEqual(bp.Links, 0);
            Common.Dp("Найдено " + bp.Links.ToString() + " ссылок");
        }

        //[Test(Description = "Извлечение текста поста из Яндекса.")]
        //public void GetYandexPostSuccess()
        //{
        //    //http://community.livejournal.com/na_pozitive/558608.html
        //    BlogPost bp = BlogPost.SimpleLink("http://galkovsky.livejournal.com/243348.html");
        //    PostWatch pw = new PostWatch();
        //    pw.ExtractLinksComms(bp);
        //    //http://blogs.yandex.ru/cachedcopy.xml?f=d6e6fac48ed781e472213fad23c2e3eb&i=0&m=http%3A%2F%2Fmagictop30.livejournal.com%2F580.html
        //    string fulltext = pw.GetYandexPost(bp.Body);
        //    Common.Dp("Из яндекса извлечен текст " + fulltext);
        //    Assert.AreEqual(false, String.IsNullOrEmpty(fulltext));
        //}

        /// <summary>
        /// ТЕстирую работу с темами Яндекса
        /// </summary>
        [TestMethod]
        public void YandexThemes()
        {
            var tt = new TopTheme();
            List<Theme> list = tt.LoadLasts();
            BlogPost bp = tt.FormThemePost(list[0]);
            Assert.AreNotEqual(null,bp);
        }

        /// <summary>
        /// Делаем разбор ответа яндекса
        /// </summary>
        [TestMethod]
        public void YandexRssParser()
        {
            //file://localhost/C:/temp/2.xml
            //http://blogs.yandex.ru/entriesapi/
            RssDocument rss = RssDocument.Load(new Uri("http://blogs.yandex.ru/entriesapi/"));
            Assert.AreNotEqual(null,rss.Channel);
        }

        /// <summary>
        /// Загрузка частот обращения к яндексу
        /// </summary>
        //[Test(Description = "Some yandex words")]
        [TestMethod]
        public void GetSexFrequency()
        {
            Words ww = new Words();
            Dictionary<string,int> oRet =  ww.GetWordFrequency("любовь");
            Assert.AreNotEqual(0,oRet.Count);
        }

        //[Test(Description = "Some yandex words")]
        [TestMethod]
        public void GetWordsNext()
        {
            Words ww = new Words();
            List<string> oRet = ww.GetWordContinue("любовь");
            Assert.AreNotEqual(0, oRet.Count);
        }

        //[Test(Description = "Text translate")]
        [TestMethod]
        public void TranslateAPITest()
        {
            string res = TranslateAPI.Call(
                "trnsl.1.1.20160223T203628Z.05e7811282d6e0a4.a265534f9bed17a3ae260aa236922bb07de15c94",
                "whats my name?", "en","ru");
            Debug.WriteLine(res);
        }
    }
}
